
#ifndef _QUICK_HAY_H_
#define _QUICK_HAY_H_

#include "Equations/ScalarEquation.hpp"

namespace Tuna {

  template <typename T, int Dim> class Quick_Hay;

  template <typename T>
  struct Typeinfo <Quick_Hay<T, 1> > {
    typedef T prec_t;
    enum { Dim = 1 };
  };

  template <typename T>
  struct Typeinfo <Quick_Hay<T, 2> > {
    typedef T prec_t;
    enum { Dim = 2 };
  };

  template <typename T>
  struct Typeinfo <Quick_Hay<T, 3> > {
    typedef T prec_t;
    enum { Dim = 3 };
  };

  //Mon Apr 15 15:33:37 CST 2002
/*! 
 ***************************************************************************
 * Adaptor for QUICK for energy equation.
 ***************************************************************************
 *  \author  Luis M. de la Cruz [ Wed May  6 19:01:13 CDT 2009 ]
 ***************************************************************************
 */

template<class Tprec, int Dim>
class Quick_Hay : public ScalarEquation< Quick_Hay<Tprec, Dim> > 
{
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::aE;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::aW;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::aN;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::aS;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::aF;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::aB;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::aP;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::sp;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::dx;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::dy;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::dz;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::bi;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::ei;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::bj;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::ej;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::bk;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::ek;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::dt;    
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::applyBoundaryConditions1D;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::applyBoundaryConditions2D;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::applyBoundaryConditions3D;
    using GeneralEquation<ScalarEquation<Quick_Hay<Tprec, Dim > > >::applyBoundaryConditionsStagger1D;
    using ScalarEquation<Quick_Hay<Tprec, Dim > >::Gamma;
    using ScalarEquation<Quick_Hay<Tprec, Dim> >::phi_0;
    using ScalarEquation<Quick_Hay<Tprec, Dim> >::u;
    using ScalarEquation<Quick_Hay<Tprec, Dim> >::v;
    using ScalarEquation<Quick_Hay<Tprec, Dim> >::w;
    
public:
    typedef Tprec prec_t;
    typedef typename TunaArray<prec_t, Dim >::huge ScalarField;

    Quick_Hay() : ScalarEquation<Quick_Hay<prec_t, Dim> >() { }
    ~Quick_Hay() { };

  /*!
   * FVM coefficients calculations in 1D.
   */
  inline bool calcCoefficients1D(); 

  /*!
   * FVM coefficients calculations in 2D.
   */
  inline bool calcCoefficients2D();

  /*!
   * FVM coefficients calculations in 3D.
   */
  inline bool calcCoefficients3D();

    inline void printInfo() { std::cout << " Quick_Hay "; }
};

} // Tuna namespace


#include "../../src/Schemes/Quick_Hay.cpp"

#endif //_QUICK_HAY_H_








